<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>DNMP - формат сообщений</title>
<link href="ice.css" type="text/css" rel="stylesheet"/>
</head>
<body>
<title>Формат сообщений</title>
<p><b>Distributed Network Messaging Protocol</b></p>

<p>Коммерческое использование только с разрешения автора.<br>
При использовании необходимо явно указывать ссылку на источник.</p>

<p>Sergey Bodrov, 2008-12-26</p>

<p><b>Формат сообщений</b></p>

<center><img src="pics/dnmp_msg.png" /></center>

<p>Описание имеет вид:<br>
число_байт - описание<br>
ХХ - переменное число байт</p>

<p>Размер указывает число байтов, следующих за самим размером. Например, размер сообщения 80 байт, это значит, что сначала идет указатель размера (4 байта), а потом само сообщение (80 байт).</p>

<p>Служебная информация представляет собой набор текстовых строк, разделенных символами перевода строки (CR+LF). Формат данных в строках определяется типом сообщения. Общие правила:
<li> Первое слово в строке является ключевым. 
<li> После ключевого слова может следовать разделитель и параметры (один или несколько).
<li> Если в начале строки стоит пробел или таб, значит это продолжение предыдущей строки.
<li> Пустая строка (состоящая только из символов перевода строки) означает конец служебной информации.
</p>

<p>Разделителем может быть знак "=" (равно), ":" (двоеточие) или " " (пробел), в зависимости от формата данных. Варианты форматов данных:
<li> имя значение1 значение2
<li> имя=значение
<li> имя: имя1=значение1; имя2=значение2
</p>

<p><u>Все сообщения имеют формат:</u></p>
04 - размер сообщения<br>
04 - тип сообщения<br>
04 - таймштамп<br>
08 - адрес отправителя<br>
08 - адрес получателя<br>
04 - смещение от начала до синбаев (размер содержимого + 24 байта)<br>
04 - размер служебной информации<br>
XX - служебная информация<br>
04 - размер содержимого сообщения<br>
XX - содержимое сообщения<br>
XX - синбаи (по 4 байта)<br>

<p>
Номер узла и номер точки в адресе, а также размеры блоков представлены в виде векторов по 32 бита (4 байта). Если первый бит 32-битного вектора равен 1, то к значению вектора прибавляется еще один вектор на 32 бита.<br>
<code>
Вектор 32 бит:  0xxx xxxx<br>
Вектор 64 бит:  1xxx xxxx  0xxx xxxx<br>
Вектор 96 бит:  1xxx xxxx  1xxx xxxx  0xxx xxxx<br>
</code>
</p>

<p><u><b>Типы сообщений</b></u></p>

<ul>
<li><a href="auth.htm">AUTH (Authentication) - Аутентификация</a>
<li><a href="info.htm">INFO (Information) - Обмен служебной информацией</a>
<li><a href="usrd.htm">USRD (Users Directory) - Каталог пользователей</a>
<li><a href="srvd.htm">SRVD (Services Directory) - Каталог сервисов</a>
<li><a href="grpc.htm">GRPC (Group Chat) - Канал, групповой чат</a>
<li><a href="flst.htm">FLST (Files Storage) - Хранилище файлов</a>
<li><a href="chat.htm">CHAT (Short messages) - Чат, короткие сообщения между пользователями</a>
<li><a href="mail.htm">MAIL (Long messages) - Почта, длинные сообщения между пользователями</a>
<li><a href="foru.htm">FORU (Forums) - Форумы</a>
</ul>


</body>
</html>